home *** CD-ROM | disk | FTP | other *** search
/ PD Collection CD 1 / PD Collection CD 1.iso / textual / tex / files / !tex / mfinputs / grayf / mf
Encoding:
Text File  |  1988-02-26  |  2.9 KB  |  84 lines

  1. % This is GRAYF.MF in text format, as of Mar 31, 1986.
  2. % More-or-less general gray font generator
  3. % See Appendix H of The METAFONTbook for how to use it
  4.  
  5. forsuffixes m = mag,rep:
  6.  if unknown m: m := 1;
  7.  elseif (m<1) or (m<>floor m):
  8.   errmessage "Sorry, " & str m & " must be a positive integer";
  9.   m := 1; fi endfor
  10.  
  11. mg := mag; mag := 1; mode_setup;
  12. if mg>1: hppp := hppp*mg; vppp := vppp*mg;
  13.  extra_endchar:=
  14.   "if charcode>0:currentpicture:=currentpicture scaled mg;fi"
  15.   & extra_endchar; fi;
  16.  
  17. if picture pix_picture: rep := 1;
  18.  cull pix_picture keeping (1,infinity);
  19. else: for z=(0,2),(1,0),(2,3),(3,1):
  20.   fill unitsquare shifted z; endfor
  21.  if not boolean lightweight: addto currentpicture also
  22.   currentpicture rotated 90 xscaled -1; fi
  23.  if unknown scale: scale := max(1,round(pixels_per_inch/300)); fi
  24.  pix_wd := pix_ht := 4scale;
  25.  if rep>1: picture pix;
  26.    currentpicture := pix_picture shifted-(1,1); pix := currentpicture;
  27.    for r=1 upto rep-1: addto currentpicture also pix shifted(4r,0); endfor
  28.    cullit; pix := currentpicture;
  29.    for r=1 upto rep-1: addto currentpicture also pix shifted(0,4r); endfor
  30.    unfill unitsquare xscaled 4rep yscaled 2 shifted-(1,1);
  31.    unfill unitsquare yscaled 4rep xscaled 2 shifted-(1,1); cullit; fi
  32.  picture pix_picture; pix_picture := currentpicture scaled scale;
  33.  pix_wd := pix_ht := 4scale*rep; fi
  34.  
  35. def # = *72.27/pixels_per_inch enddef;
  36. if unknown dotsize: dotsize := 2.5pix_wd/rep; fi
  37.  
  38. beginchar(0,1.2dotsize#,1.2dotsize#,0);
  39. fill fullcircle scaled dotsize scaled mg; endchar;
  40.  
  41. numeric a[]; newinternal b,k;
  42. def next_binary =
  43.  k := 0; forever: if k>b: a[incr b] := 0; fi
  44.   exitif a[k]=0; a[k] := 0; k := k+1; endfor
  45.  a[k] := 1 enddef;
  46. def next_special_binary =
  47.  if a[0]=1: for k=0 upto b: a[k] := 0; endfor a[incr b]
  48.  else: k := 0; forever: exitif a[incr k]=1; endfor
  49.   a[k-1] fi := 1 enddef;
  50.  
  51. def make_char =
  52.  clearit; next_binary;
  53.  for k=0 upto b: if a[k]=1:
  54.   addto currentpicture also pix_picture shifted(0,-k*pix_ht); fi endfor
  55.  charcode := charcode+1; chardp := b*charht;
  56.  scantokens extra_endchar; shipout currentpicture enddef;
  57.  
  58. charwd := pix_wd#; charht := pix_ht#; chardx := pix_wd*mg;
  59. b := -1;
  60.  
  61. if boolean large_pixels:
  62.  for k=1 upto 7: make_char; charlist k:k+120; endfor
  63.  charcode := 120; b := -1;
  64.  addto pix_picture also pix_picture shifted (chardx,0);
  65.  charwd := 2charwd; chardx := 2chardx;
  66.  for k=1 upto 7: make_char; endfor
  67. else: for k=1 upto 63: make_char; endfor
  68.  let next_binary = next_special_binary;
  69.  for k=64 upto 120: make_char; endfor
  70.  for k=121,122: charcode := k;
  71.   addto currentpicture also currentpicture shifted (chardx,0);
  72.   charwd := 2charwd; chardx := 2chardx;
  73.   scantokens extra_endchar; shipout currentpicture; endfor
  74.  charlist 120:121:122; fi
  75.  
  76. font_coding_scheme "GFGRAY";
  77. font_size 8(pix_wd#);
  78. font_normal_space pix_wd#;
  79. font_x_height pix_ht#;
  80. font_quad pix_wd#;
  81. fontdimen 8: if known rulethickness: rulethickness
  82.  else: pix_wd#/(2rep) fi;
  83. bye.
  84.